snapshot: Fix assert in inhibition
authorAlexander Larsson <alexl@redhat.com>
Thu, 4 Jun 2020 10:37:48 +0000 (12:37 +0200)
committerAlexander Larsson <alexl@redhat.com>
Thu, 4 Jun 2020 12:22:27 +0000 (14:22 +0200)
In https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/2027 i was getting

Bail out! ERROR:../testsuite/reftests/reftest-snapshot.c:212:reftest_uninhibit_snapshot: assertion failed: (inhibit_count > 0)

In (for example the box-shadow-changes-modify-clip reftest. I can reproduce this (on master) with:

```
$ xvfb-run -a -s "-screen 0 1024x768x24" meson test --suite gtk:reftest "reftest box-shadow-changes-modify-clip.ui"
...
1/1 gtk:reftest / reftest box-shadow-changes-modify-clip.ui ERROR          0.77s
``

Fix this by re-inhibiting if we didn't draw anything, or we will get an assert the next paint.

testsuite/reftests/reftest-snapshot.c

index 5ea2262fe5db8b70aed6afa89fbd46ed025347e2..2d870f66e44c09ac8dc7d9ee5713e381402750a3 100644 (file)
@@ -231,7 +231,10 @@ draw_paintable (GdkPaintable *paintable,
   cairo_t *cr;
 
   if (!reftest_uninhibit_snapshot ())
-    return;
+    {
+      reftest_inhibit_snapshot();
+      return;
+    }
 
   snapshot = gtk_snapshot_new ();
   gdk_paintable_snapshot (paintable,
@@ -244,7 +247,10 @@ draw_paintable (GdkPaintable *paintable,
    * the invalidations were only side effects of resizes.
    */
   if (node == NULL)
-    return;
+    {
+      reftest_inhibit_snapshot();
+      return;
+    }
 
   surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
                                         gdk_paintable_get_intrinsic_width (paintable),